// import axios from "axios"


// // axios 实例的默认参数
// const defaultConfig = {
//     timeout: 5000,
//     baseURl: ''
// }
// const axiosInstance = axios.create(defaultConfig)

// // TODO:请求拦截
// axiosInstance.interceptors.request.use(config => {
//     return config
// }, err => {
//     return Promise.reject(err)
// })


// // TODO:响应拦截
// axiosInstance.interceptors.response.use(config => {
//     return config
// }, err => {
//     return Promise.reject(err)
// })

// // TODO:封装请求
// // get
// function httpRequestGet(url, params) {
//     return axiosInstance.get(url, params).then(res => res.data).catch()
// }
// // post
// function httpRequestPost(url, params) {
//     return axiosInstance.post(url, params).then(res => res.data).catch()
// }


// export default {
//     httpRequestGet,
//     httpRequestPost
// }

import axios, { InternalAxiosRequestConfig, AxiosResponse, AxiosRequestConfig } from "axios"

const defaultConfig = {
    timeout: 5000,
    baseURL: import.meta.env.PROD ? '' : 'http://localhost:3000'
}
class Http {
    constructor() {
        this.httpInterceptorsRequest()
        this.httpInterceptorsResponse()
    }
    private static axiosInstance = axios.create(defaultConfig)
    private httpInterceptorsRequest() {
        Http.axiosInstance.interceptors.request.use((config: InternalAxiosRequestConfig) => {
            return config
        }, err => {
            return Promise.reject(err)
        })
    }
    private httpInterceptorsResponse() {
        Http.axiosInstance.interceptors.response.use((Response: AxiosResponse) => {
            return Response
        }, err => {
            return Promise.reject(err)
        })
    }

    /**
     * 封装请求
     */
    public httpRequestGet<T>(url: string, params?: AxiosRequestConfig): Promise<T> {
        return Http.axiosInstance.get(url, { params }).then(res => res.data).catch()
    }
    public httpRequestPost<T>(url: string, params?: AxiosRequestConfig): Promise<T> {
        return Http.axiosInstance.post(url, params).then(res => res.data).catch()
    }

}

// 以实例的方式暴露出去
export const http = new Http()